<?php
/**
 * 注册树模式
 * User: Yan
 * Date: 2018/7/5
 * Time: 11:45
 */

namespace Yan;

include_once 'Factory.php';

/**
 * Class Register
 * 注册树模式
 * 前面的工厂模式和单例模式是为了更好的产生对象，避免资源的浪费、后期的维护
 * 注册树模式是为了更好的管理对象，无论是工厂模式还是单例模式产生的对象，都可以插到树上，当需要使用的时候，直接从树上摘下来用就可以了
 * 至于在哪里可以将常用对象插到树上，我的理解是在框架中，构造就可以插上
 * @package Yan
 */
class Register
{
    protected static $objects;

    /**
     * 将对象插到注册树上
     * @param $key
     * @param $object
     */
    public static function set($key, $object)
    {
        self::$objects[$key] = $object;
    }

    /**
     * 从注册树上获取对象
     * @param $key
     * @return mixed
     */
    public static function get($key)
    {
        return self::$objects[$key];
    }

    /**
     * 将对象从注册树上拔除
     * @param $key
     */
    public static function _unset($key)
    {
        unset(self::$objects[$key]);
    }
}
/*
# 注册对象到树上
Register::set('Singleton', Factory::getClass('Singleton'));
$Singleton = Register::get('Singleton');
var_dump($Singleton);
$Singleton2 = Register::get('Singleton');
var_dump($Singleton2);
*/
# 输出结果 object(Yan\Singleton)#1 (0) { } object(Yan\Singleton)#1 (0) { }
